/**
 * \file CDAOManager.h
 * \author Corentin Le Bail
 * \date 2009-2012
 * \brief Fichier de déclaration de la class CDAOManager
 */
//------------------------------------------------------------------------------
#ifndef __CDAOMANAGER_H__
#define __CDAOMANAGER_H__
//------------------------------------------------------------------------------
#include <QList>
#include "CDAO.h"
#include "CGlobal.h"
#include "CDAODocToPrintEx.h"
//------------------------------------------------------------------------------
/**
 * \class CDAOManager CDAOManager.h "CDAOManager.h"
 * \brief Classe du manager de la base de données
 */
class CDAOManager {
	private:
		static CDAOManager * instance;
		CDAOManager(void) {}
		QString makeCondition(QStringList keys, CGlobal::ESens sens);
		QString makeTri(QStringList keys, CGlobal::ESens sens, bool loadAll);
	public:
		/**
	 	 * \fn static CScript *getInstance(void)
	 	 * \return L'instance de la classe
		 */
		static CDAOManager * getInstance(void);
		/**
	 	 * \fn void load(CDAO *daoObject, QMap<QString, QVariant> keyValues, CGlobal::ESens sens=CGlobal::seNone)
	 	 * \brief Charge un enregistrement
		 * \param[in,out] daoObject Objet à charger
		 * \param[in] keyValues Map des Clés / valeurs de clé
		 * \param[in] sens Sens de déplacement dans les fiches
		 * \return True en cas de succès, false sinon
		 */
		bool load(CDAO *daoObject, QMap<QString, QVariant> keyValues, CGlobal::ESens sens=CGlobal::seNone);
		/**
		 * \fn bool update(CDAO *daoObject)
		 * \brief Met à jour un enregistrement
		 * \param[in] daoObject Objet à mettre à jour
		 * \return True en cas de succès, false sinon
		 */
		bool update(CDAO *daoObject);
		/**
		 * \fn bool insert(CDAO *daoObject)
		 * \brief Ajoute un enregistrement
		 * \param[in] daoObject Objet à ajouter
		 * \return True en cas de succès, false sinon
		 */
		bool insert(CDAO *daoObject);
		/**
		* \fn bool drop(CDAO *daoObject, QMap<QString, QVariant> keyValues)
		* \brief Supprimer un enregistrement
		* \param[in] daoObject Objet à supprimer
		* \param[in] keyValues Map des Clés / valeurs de clé
		* \return True en cas de succès, false sinon
		*/
		bool drop(CDAO *daoObject, QMap<QString, QVariant> keyValues);
		/**
		 * \fn int getNbEnregistrement(CDAO *daoObject)
		 * \return Le nombre d'enregistrement de la table associé à un objet DAO
		 */
		int getNbEnregistrement(CDAO *daoObject);
		/**
		 * \fn QDate getCurrentDate(void)
		 * \return La date courante du serveur
		 */
		QDate getCurrentDate(void);
		/**
		 * \fn QTime getCurrentTime(void)
		 * \return L'heure courante du serveur
		 */
		QTime getCurrentTime(void);
		/**
		 * \fn int loadDoc2Print(QString frmName, QList<CDAODocToPrintEx *> *list)
		 * \param[in] frmName Nom de la fenêtre
		 * \param[out] list Un pointeur sur une liste d'éditions
		 * \return Le nombre d'édition disponible
		 */
		int loadDoc2Print(QString frmName, QList<CDAODocToPrintEx *> *list);
};
//------------------------------------------------------------------------------
#endif //__CDAOMANAGER_H__
//------------------------------------------------------------------------------